LINQ (Language Integrated Query) ব্যবহার করার সময় কোনো সমস্যা বা ভুল হতে পারে, যা প্রোগ্রামের কাজকে ব্যাহত করতে পারে। LINQ এ Exception Handling এবং Debugging Techniques ব্যবহার করে এই সমস্যা সহজে চিহ্নিত এবং সমাধান করা সম্ভব। এই সেকশনে LINQ এর মধ্যে এক্সসেপশন হ্যান্ডলিং এবং ডিবাগিং টেকনিকগুলো নিয়ে আলোচনা করা হবে।
LINQ কুয়েরি চালানোর সময় বিভিন্ন ধরনের exceptions বা ত্রুটি হতে পারে। এক্সসেপশন হ্যান্ডলিং LINQ এ প্রোগ্রামটি নিরাপদ এবং রোবস্ট (robust) রাখার জন্য গুরুত্বপূর্ণ। সাধারণত LINQ কুয়েরি try-catch ব্লক ব্যবহার করে এক্সসেপশন হ্যান্ডল করা হয়।
এটি একটি সাধারণ কৌশল যেখানে আপনি LINQ কুয়েরি চালানোর সময় সম্ভাব্য এক্সসেপশন ধরে ফেলতে পারবেন। এর মাধ্যমে আপনি সিস্টেম ক্র্যাশ হওয়া থেকে রক্ষা করতে পারেন এবং ব্যবহারকারীকে অর্থপূর্ণ বার্তা দেখাতে পারেন।
try
{
var query = from student in students
where student.Age < 20
select student;
foreach (var student in query)
{
Console.WriteLine(student.Name);
}
}
catch (Exception ex)
{
Console.WriteLine($"An error occurred: {ex.Message}");
}
এখানে, try ব্লকে LINQ কুয়েরি চালানো হচ্ছে এবং যদি কোনো ত্রুটি ঘটে, তবে catch ব্লক এটি ধরবে এবং ব্যবহারকারীকে ত্রুটির বার্তা দেখাবে। এটি কেবল এক্সসেপশন হ্যান্ডলিং নয়, ডিবাগিং এবং ট্রাবলশুটিংয়ের জন্যও কার্যকর।
LINQ কুয়েরি বিভিন্ন ধরনের ত্রুটি তৈরি করতে পারে, যেমন InvalidOperationException, ArgumentNullException, FormatException ইত্যাদি। এসব ত্রুটি গুলো নির্দিষ্টভাবে ক্যাচ করা যেতে পারে:
try
{
var query = from student in students
where student.Age < 20
select student;
}
catch (InvalidOperationException ex)
{
Console.WriteLine($"Invalid operation: {ex.Message}");
}
catch (ArgumentNullException ex)
{
Console.WriteLine($"Argument is null: {ex.Message}");
}
catch (Exception ex)
{
Console.WriteLine($"An unexpected error occurred: {ex.Message}");
}
এখানে, catch ব্লকগুলিতে নির্দিষ্ট এক্সসেপশনগুলি ধরার জন্য তাদের টাইপ উল্লেখ করা হয়েছে। এটি ত্রুটি হ্যান্ডলিং আরো বিস্তারিত এবং নির্দিষ্ট করে তোলে।
LINQ কুয়েরি ডিবাগ করার জন্য কিছু সাধারণ পদ্ধতি রয়েছে যা আপনাকে কোডের সমস্যাগুলি চিহ্নিত করতে সহায়তা করবে।
Visual Studio ডিবাগিং সেশনে Immediate Window ব্যবহার করে আপনি LINQ কুয়েরির মধ্যে চলমান ডেটা পরীক্ষা করতে পারেন। এটি আপনাকে কোড চলার সময় ভ্যারিয়েবল বা এক্সপ্রেশনগুলি পরীক্ষা করতে সহায়তা করে।
? students.Where(s => s.Age < 20).Count()
এটি আপনাকে দ্রুত কুয়েরি চলমান ফলাফল দেখতে সাহায্য করবে।
LINQ কুয়েরি অভ্যন্তরীণভাবে IEnumerable অথবা IQueryable রিটার্ন করে। এই কুয়েরির মানে আপনি সরাসরি কুয়েরির রেজাল্ট দেখতে পাবেন না যতক্ষণ না আপনি এক্সিকিউট না করেন। কোড ডিবাগ করার সময় আপনি কুয়েরির রেজাল্ট দেখতে পারেন নিম্নলিখিতভাবে:
var query = from student in students
where student.Age < 20
select student;
foreach (var student in query)
{
Console.WriteLine(student.Name);
}
এখানে, আপনি ডিবাগিং চলাকালে কুয়েরির foreach লুপের মধ্যে কনসোল আউটপুট দেখতে পারবেন, যা কুয়েরির রেজাল্ট দেখায়।
LINQ কুয়েরির ফলাফল ডেটাবেস বা কোনো ডেটা সংগ্রহ থেকে ফেচ হওয়ার সময় বিলম্বিত হতে পারে। ToList() ব্যবহার করলে কুয়েরি ফলাফলটি সেগ্রিগেট (eager-loaded) হয়ে যাবে, এবং আপনি আউটপুটটি দেখতে পারবেন।
var studentsList = students.Where(s => s.Age < 20).ToList();
foreach (var student in studentsList)
{
Console.WriteLine(student.Name);
}
এখানে ToList() ব্যবহার করে কুয়েরি ফলাফল ইমিডিয়েটলি এক্সিকিউট করা হচ্ছে, যাতে আপনি ডিবাগিংয়ের সময় দ্রুত ফলাফল দেখতে পারেন।
Watch Window একটি শক্তিশালী টুল, যা ডিবাগিং চলাকালে নির্দিষ্ট এক্সপ্রেশনগুলির মান পরীক্ষা করতে ব্যবহৃত হয়। আপনি এটি ব্যবহার করে LINQ কুয়েরির মধ্যে চলমান মান পরীক্ষা করতে পারেন:
students.Where(s => s.Age < 20)
এটি আপনাকে কুয়েরি ফলাফলটি চলার সময় দেখতে সাহায্য করবে।
LINQ এ exception handling এবং debugging techniques ব্যবহারের মাধ্যমে কোডের কার্যকারিতা বাড়ানো এবং ত্রুটি চিহ্নিত করা সহজ হয়। Exception Handling দ্বারা আপনি সঠিকভাবে ত্রুটির বার্তা প্রদান করতে পারেন, এবং Debugging Techniques ব্যবহার করে আপনি কুয়েরি এবং ডেটার ফলাফল সহজে বিশ্লেষণ করতে পারেন। এর মাধ্যমে আপনার LINQ কুয়েরি আরও স্থিতিশীল এবং উন্নত হবে।
LINQ একটি শক্তিশালী টুল, তবে এটি ব্যবহার করার সময় কিছু সাধারণ ভুল হতে পারে যা ডেভেলপারদের কাজ বাধাগ্রস্ত করতে পারে। এই নিবন্ধে, LINQ ব্যবহার করার সময় ঘটে এমন কিছু সাধারণ ভুল এবং তাদের সমাধান নিয়ে আলোচনা করা হবে।
যখন আপনি LINQ কোয়েরি চালান এবং ডেটাবেস থেকে কোনো রেকর্ড না পাওয়া যায় বা কোয়েরি থেকে null
ভ্যালু রিটার্ন আসে, তখন NullReferenceException হতে পারে। এই সমস্যা সাধারণত তখন ঘটে যখন আপনি কোনো অবজেক্টের প্রপার্টি বা মেথড কল করতে চেষ্টা করেন, কিন্তু তা null
হয়।
এই সমস্যা এড়াতে, আপনি null চেক করতে পারেন বা FirstOrDefault()
এবং SingleOrDefault()
এর মতো মেথড ব্যবহার করতে পারেন যা null
রিটার্ন করলে এটি নিরাপদে হ্যান্ডেল করে।
উদাহরণ:
using (var context = new ApplicationDbContext())
{
var person = context.People
.FirstOrDefault(p => p.Name == "Alice");
if (person != null)
{
Console.WriteLine($"Found: {person.Name}, Age: {person.Age}");
}
else
{
Console.WriteLine("Person not found.");
}
}
এখানে, FirstOrDefault() ব্যবহৃত হয়েছে, যাতে রেকর্ড না পাওয়া গেলে null
ফেরত আসে এবং আপনি নিরাপদে তা চেক করতে পারেন।
LINQ ব্যবহার করার সময় InvalidCastException ঘটতে পারে যদি আপনি একটি ডেটা টাইপের জন্য ভুল কাস্টিং করেন। যেমন, যদি আপনি একটি ইন্টিজার (integer) ভ্যালুকে স্ট্রিং (string) হিসেবে কাস্ট করার চেষ্টা করেন।
এই সমস্যা এড়াতে, নিশ্চিত করুন যে আপনি যেই ডেটা টাইপের সাথে কাজ করছেন তা সঠিকভাবে কাস্ট করা হয়েছে। আপনি as কিওয়ার্ড বা Try-Catch ব্লক ব্যবহার করে এই ত্রুটি সঠিকভাবে হ্যান্ডেল করতে পারেন।
উদাহরণ:
using (var context = new ApplicationDbContext())
{
var person = context.People
.FirstOrDefault(p => p.Name == "Bob");
if (person != null)
{
try
{
int age = Convert.ToInt32(person.Age);
Console.WriteLine($"Age: {age}");
}
catch (InvalidCastException ex)
{
Console.WriteLine("Invalid cast: " + ex.Message);
}
}
}
এখানে Convert.ToInt32() ব্যবহার করে Age
ফিল্ডের কাস্টিং নিশ্চিত করা হয়েছে। যদি কাস্টিংয়ের সমস্যা হয়, তবে try-catch ব্লক দ্বারা সঠিক ত্রুটি হ্যান্ডেল করা হবে।
InvalidOperationException: Sequence contains no elements এররটি ঘটে যখন আপনি First() বা Single() মেথড ব্যবহার করে একটি রেকর্ড ফেচ করার চেষ্টা করেন এবং ডেটা সেটে কোনো রেকর্ড না পাওয়া যায়।
এই সমস্যা এড়াতে FirstOrDefault() বা SingleOrDefault() ব্যবহার করুন, যেগুলো null
রিটার্ন করলে কোনো ত্রুটি তৈরি হয় না।
উদাহরণ:
using (var context = new ApplicationDbContext())
{
var person = context.People
.FirstOrDefault(p => p.Name == "Unknown");
if (person != null)
{
Console.WriteLine($"Found: {person.Name}");
}
else
{
Console.WriteLine("Person not found.");
}
}
এখানে FirstOrDefault() ব্যবহার করা হয়েছে, যাতে রেকর্ড না পেলে এটি null
ফেরত দেয় এবং এর পরবর্তী কোড ব্লক নিরাপদ থাকে।
LINQ কোয়েরির মধ্যে Deferred Execution সমস্যা ঘটে যখন কোয়েরি তৈরি করা হয়, কিন্তু তা execute করা হয় না যতক্ষণ না আপনি কোয়েরি ফলাফল ব্যবহার না করেন। এটি আপনার প্রত্যাশার চেয়ে বেশি ফলাফল আনতে পারে, বিশেষত যখন কোয়েরি ডেটাবেসের সাথে কাজ করে।
ToList() বা ToArray() ব্যবহার করে আপনি কোয়েরি রেজাল্টগুলি Eagerly execute করতে পারেন, যাতে ডেটা সংগ্রহ করার সময় এটি সম্পূর্ণভাবে কাজ করে।
উদাহরণ:
using (var context = new ApplicationDbContext())
{
var query = context.People
.Where(p => p.Age > 30)
.OrderBy(p => p.Name)
.ToList(); // Eager execution
foreach (var person in query)
{
Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
}
}
এখানে, ToList() ব্যবহার করে কোয়েরি ম্যানিপুলেট করার আগে সম্পূর্ণভাবে রেজাল্টে পরিণত করা হয়েছে।
N+1 Query Problem ঘটে যখন আপনি একটি বড় ডেটাসেটের উপর লুপ দিয়ে LINQ কোয়েরি চালান এবং প্রতিটি রেকর্ডের জন্য আলাদা আলাদা ডেটাবেস কোয়েরি রান করেন। এটি পারফরমেন্স ইস্যু তৈরি করতে পারে, বিশেষত যখন লুপের মধ্যে ডেটাবেসে অনেকগুলো কোয়েরি পাঠানো হয়।
এই সমস্যা এড়াতে, Include() মেথড ব্যবহার করে আপনার সম্পর্কিত (related) ডেটা লোড করুন একসাথে।
উদাহরণ:
using (var context = new ApplicationDbContext())
{
var peopleWithDepartments = context.People
.Include(p => p.Department)
.ToList();
foreach (var person in peopleWithDepartments)
{
Console.WriteLine($"{person.Name} works in {person.Department.Name}.");
}
}
এখানে, Include() মেথড ব্যবহার করা হয়েছে যা সম্পর্কিত Department ডেটাকে একসাথে লোড করে, ফলে আলাদা আলাদা কোয়েরি রান করতে হয় না।
LINQ তে GroupBy() ব্যবহার করার সময় যদি গ্রুপিং শর্ত সঠিক না হয় বা অপ্রত্যাশিত ফলাফল আসে, তবে গ্রুপিং ভুল হতে পারে।
গ্রুপিং করার আগে, নিশ্চিত করুন যে আপনি সঠিকভাবে কী গ্রুপ করছেন এবং আপনার select বা project অংশ সঠিকভাবে ডিফাইন করা হয়েছে।
উদাহরণ:
using (var context = new ApplicationDbContext())
{
var groupedByAge = context.People
.GroupBy(p => p.Age)
.Select(g => new
{
Age = g.Key,
Count = g.Count()
});
foreach (var group in groupedByAge)
{
Console.WriteLine($"Age: {group.Age}, Count: {group.Count}");
}
}
এখানে, GroupBy() এবং Select() সঠিকভাবে ব্যবহার করা হয়েছে যাতে গ্রুপিং করা ডেটা থেকে সংখ্যা (Count) বের করা যায়।
LINQ একটি শক্তিশালী টুল হলেও এটি ব্যবহারের সময় কিছু সাধারণ ত্রুটি হতে পারে। উপরোক্ত ত্রুটিগুলোর মাধ্যমে আপনি সহজে LINQ কোডে সাধারণ ভুলগুলো চিহ্নিত করে সেগুলো সমাধান করতে পারবেন। সঠিকভাবে LINQ ব্যবহার করলে ডেটা ফেচ এবং ম্যানিপুলেশন আরও কার্যকরী এবং নির্ভুল হয়।
LINQ (Language Integrated Query) কোডে ত্রুটি শনাক্ত করা এবং সমস্যা সমাধান করার জন্য কিছু নির্দিষ্ট debugging টেকনিকস ব্যবহার করা যেতে পারে। LINQ কোডে ভুল শনাক্ত করা কখনো কখনো কঠিন হতে পারে, বিশেষ করে যখন কোড জটিল হয় বা একাধিক শর্তের মধ্যে কাজ করছে। তবে, কিছু সাধারণ debugging টেকনিকস রয়েছে যেগুলি আপনাকে LINQ কোড আরও সহজে ডিবাগ করতে সহায়ক হবে।
LINQ কোডে ভুল শনাক্ত করার একটি কার্যকরী পদ্ধতি হল পুরো কোয়েরির বদলে query এর ছোট ছোট অংশে বিভক্ত করে পরীক্ষা করা। এটি আপনাকে দেখতে সাহায্য করবে কোন অংশটি সঠিকভাবে কাজ করছে এবং কোন অংশে সমস্যা হচ্ছে।
উদাহরণ:
ধরা যাক, আপনি একটি Employee
লিস্টের উপর LINQ কোয়েরি করছেন এবং কোয়েরি প্রত্যাশিত আউটপুট দিচ্ছে না:
List<Employee> employees = new List<Employee>
{
new Employee { Name = "Alice", Age = 25 },
new Employee { Name = "Bob", Age = 30 },
new Employee { Name = "Charlie", Age = 35 }
};
var query = from emp in employees
where emp.Age > 30
orderby emp.Name
select emp;
// ডিবাগging জন্য: query এর প্রতিটি অংশ পৃথকভাবে পরীক্ষা করুন
var ageFilter = employees.Where(e => e.Age > 30);
var orderedEmployees = ageFilter.OrderBy(e => e.Name);
var result = orderedEmployees.ToList();
এখানে, প্রথমে Where
ক্লজ ব্যবহার করে Age
ফিল্টার করা হয়েছে, তারপর OrderBy
দিয়ে অর্ডার করা হয়েছে, এবং অবশেষে ToList
দিয়ে ফলাফল বের করা হয়েছে। এইভাবে, আপনি প্রতিটি অংশ আলাদাভাবে পরীক্ষা করতে পারবেন এবং দেখবেন যে কোন অংশে সমস্যা হচ্ছে।
LINQ কোয়েরি Deferred Execution বা Immediate Execution হতে পারে। এটি বুঝতে হবে যে আপনি যখন LINQ কোয়েরি লিখবেন, তখন তা শুধু কোয়েরি তৈরি করবে, কিন্তু এক্সিকিউট করবে না যতক্ষণ না আপনি ফলাফল আউটপুট করতে বলবেন।
ToList()
, ToArray()
, Count()
, ইত্যাদি মেথডের মাধ্যমে Immediate Execution ঘটানো হয়। অন্যথায়, শুধুমাত্র Deferred Execution ঘটে, যেখানে LINQ কোয়েরি তখনই কার্যকর হবে যখন আপনি তাকে ফলাফল পেতে বলবেন।
উদাহরণ:
var query = from emp in employees
where emp.Age > 30
select emp;
// Deferred Execution - query এ এখনও এক্সিকিউশন হয়নি
var result = query.ToList(); // Immediate Execution (এখন query এক্সিকিউট হবে)
আপনি যদি দেখতে চান যে LINQ কোয়েরি ঠিকমত কাজ করছে কি না, তবে ToList()
, ToArray()
বা অন্য কোনও ফলাফল রিটার্নিং মেথড ব্যবহার করে কোয়েরি এক্সিকিউট করুন।
LINQ কোয়েরির আউটপুট দেখতে বা debug করতে, আপনি কোয়েরির ফলাফলকে কনসোলে আউটপুট করতে পারেন। ToList()
বা ToArray()
কল করার পরে আউটপুট দেখতে, লুপ ব্যবহার করে প্রিন্ট করুন।
উদাহরণ:
var query = from emp in employees
where emp.Age > 30
orderby emp.Name
select emp;
var result = query.ToList();
// আউটপুট দেখার জন্য কনসোল ব্যবহার
foreach (var emp in result)
{
Console.WriteLine($"Name: {emp.Name}, Age: {emp.Age}");
}
এখানে, কোয়েরির ফলাফল result
লিস্টে সংরক্ষিত হয়েছে এবং তারপর foreach
লুপের মাধ্যমে কনসোলে আউটপুট করা হয়েছে। এটি সাহায্য করবে কোয়েরির আউটপুট স্পষ্টভাবে দেখতে।
LINQ এর দুটি প্রধান সিনট্যাক্স আছে — Query Expression এবং Method Syntax। কখনো কখনো, Method Syntax ব্যবহার করলে সহজে ডিবাগ করা সম্ভব হতে পারে, কারণ এখানে সমস্ত অপারেশন সোজাসুজি থাকে এবং সহজে ট্র্যাক করা যায়।
উদাহরণ:
// Query Syntax
var query = from emp in employees
where emp.Age > 30
select emp;
// Method Syntax (ফাংশনাল পদ্ধতি)
var queryMethod = employees.Where(emp => emp.Age > 30).ToList();
Method Syntax আপনাকে চেইন করতে সুবিধা দেয়, যা debugging এর জন্য উপকারী হতে পারে কারণ প্রতিটি ধাপকে আলাদাভাবে ট্র্যাক করা যায়। আপনি Method Syntax ব্যবহার করে প্রতিটি ধাপের আউটপুট পরীক্ষা করতে পারেন।
LINQ কোডে ত্রুটি শনাক্ত করতে exception handling ব্যবহার করা গুরুত্বপূর্ণ। কখনো কখনো, আপনার কোয়েরিতে কিছু ভুল হতে পারে, যেমন NullReferenceException
বা InvalidOperationException
। তাই LINQ কোয়েরি চলানোর সময় try-catch ব্লক ব্যবহার করে ত্রুটি ধরা উচিত।
উদাহরণ:
try
{
var query = from emp in employees
where emp.Age > 30
orderby emp.Name
select emp;
var result = query.ToList();
foreach (var emp in result)
{
Console.WriteLine($"Name: {emp.Name}, Age: {emp.Age}");
}
}
catch (Exception ex)
{
Console.WriteLine($"Error: {ex.Message}");
}
এখানে, try-catch
ব্লক ব্যবহার করা হয়েছে যাতে কোনো ত্রুটি ঘটলে তা কনসোলে আউটপুট হয় এবং আপনি দ্রুত বুঝতে পারবেন কোথায় সমস্যা হচ্ছে।
Visual Studio এর debugger ব্যবহার করে LINQ কোয়েরি ডিবাগ করা আরও সহজ। আপনি breakpoints সেট করতে পারেন কোয়েরি লাইনের উপরে এবং এক্সিকিউশনের ধাপ ধাপ ট্র্যাক করতে পারেন। এটি আপনাকে জানাবে কোথায় ভুল হচ্ছে এবং কোন অংশে সমস্যাটি ঘটছে।
LINQ কোড ডিবাগ করতে হলে কিছু কৌশল অবলম্বন করা উচিত, যেমন কোয়েরির ছোট অংশে বিভক্ত করে পরীক্ষা করা, Immediate Execution নিশ্চিত করা, আউটপুট লগ করা, exception handling প্রয়োগ করা, এবং Visual Studio এর debugging টুলস ব্যবহার করা। এসব পদ্ধতি আপনাকে LINQ কোডে সমস্যা দ্রুত শনাক্ত করতে সাহায্য করবে।
Exception Handling একটি গুরুত্বপূর্ণ কৌশল যা প্রোগ্রামিংয়ে বিভিন্ন ধরনের ত্রুটি (error) বা ব্যতিক্রম (exception) সঠিকভাবে পরিচালনা করতে ব্যবহৃত হয়। যখন আপনার কোডের মধ্যে কোনো অপ্রত্যাশিত ত্রুটি ঘটে, তখন আপনি সেই ত্রুটিকে handle করে প্রোগ্রামের চলমানতা বজায় রাখতে পারেন। C# এ exception handling সাধারনত try
, catch
, finally
ব্লক ব্যবহার করে করা হয়।
Exception Handling এর উদ্দেশ্য হলো:
C# এ exception handling এর প্রধান উপাদান হচ্ছে try
, catch
এবং finally
ব্লক।
finally
ব্যবহার করতে পারেন। এটি সব সময় execute হবে, ত্রুটি ঘটুক বা না ঘটুক।try
{
// কোড যা ত্রুটি ঘটাতে পারে
int result = 10 / 0; // Divide by zero exception
}
catch (DivideByZeroException ex)
{
// ত্রুটি ধরা হলে এই কোডটি চলবে
Console.WriteLine("Error: " + ex.Message);
}
finally
{
// এই কোডটি সব সময় চলবে, ত্রুটি ঘটুক বা না ঘটুক
Console.WriteLine("Operation Completed");
}
এখানে:
try
ব্লকে কোড লেখা হয়েছে, যা ত্রুটি ঘটাতে পারে।catch
ব্লকটি DivideByZeroException
এর ক্ষেত্রে ত্রুটিটি ধরবে এবং সেই ত্রুটির বার্তা প্রিন্ট করবে।finally
ব্লকটি সব সময় execute হবে, এখানে "Operation Completed"
বার্তা প্রিন্ট করা হয়েছে।আউটপুট:
Error: Attempted to divide by zero.
Operation Completed
একই try
ব্লকের মধ্যে একাধিক catch
ব্লক ব্যবহার করা যেতে পারে, যা বিভিন্ন ধরনের exception ধরতে সক্ষম।
try
{
int[] numbers = { 1, 2, 3 };
Console.WriteLine(numbers[5]); // IndexOutOfRangeException
}
catch (IndexOutOfRangeException ex)
{
Console.WriteLine("Index error: " + ex.Message);
}
catch (Exception ex)
{
Console.WriteLine("General error: " + ex.Message);
}
finally
{
Console.WriteLine("Finally block executed");
}
এখানে:
IndexOutOfRangeException
ধরা হলে প্রথম catch
ব্লকটি কার্যকর হবে।catch
ব্লকটি ত্রুটিটি ধরবে।আউটপুট:
Index error: Index was outside the bounds of the array.
Finally block executed
Exception object এর মধ্যে ত্রুটির বিস্তারিত তথ্য থাকে, যেমন:
try
{
int[] numbers = { 1, 2, 3 };
Console.WriteLine(numbers[5]); // IndexOutOfRangeException
}
catch (Exception ex)
{
Console.WriteLine("Error: " + ex.Message);
Console.WriteLine("Stack Trace: " + ex.StackTrace);
}
আউটপুট:
Error: Index was outside the bounds of the array.
Stack Trace: at ExceptionHandlingExample.Program.Main() in C:\Path\To\Program.cs:line 10
আপনি নিজে custom exception তৈরি করতে পারেন, যদি প্রোগ্রামে বিশেষ কোনো ত্রুটি চিহ্নিত করতে চান। এর জন্য একটি ক্লাস তৈরি করে Exception
ক্লাসকে ইনহেরিট করতে হয়।
public class CustomException : Exception
{
public CustomException(string message) : base(message)
{
}
}
try
{
throw new CustomException("This is a custom exception");
}
catch (CustomException ex)
{
Console.WriteLine("Caught: " + ex.Message);
}
এখানে:
CustomException
ক্লাসটি Exception
থেকে ইনহেরিট করা হয়েছে।throw
কিওয়ার্ড ব্যবহার করে একটি custom exception তৈরি করা হয়েছে।আউটপুট:
Caught: This is a custom exception
catch (Exception ex)
থেকে বিরত থাকুন, কারণ এটি সব ধরনের exception ধরবে এবং সমস্যার উৎস চিহ্নিত করা কঠিন হবে।catch
ব্লক ব্যবহার করবেন না, কারণ এটি সমস্যা লুকাতে পারে এবং ডিবাগিং কঠিন করে তোলে।Exception handling প্রোগ্রামিংয়ের একটি অত্যন্ত গুরুত্বপূর্ণ অংশ। C# এ try-catch
ব্লক ব্যবহার করে ত্রুটি গুলি সঠিকভাবে ধরতে এবং সেগুলোর কার্যকরী সমাধান দিতে সাহায্য করে। finally
ব্লকটি আপনি যেকোনো ধরনের রিসোর্স ফ্রি বা ক্লিনআপ করতে ব্যবহার করতে পারেন। এছাড়া custom exceptions তৈরি করে আপনি আরও নির্দিষ্ট ও কাস্টমাইজড ত্রুটি বার্তা তৈরি করতে পারেন।
common.read_more